(module hashed-table mzscheme

  (require "../private/require.ss")
  (require-contracts)

  (require ;;"../private/contracts.ss"
           "../private/binding.ss"
           "table-interface.ss"
           "table-from-set.ss"
           "../set/hashed-set.ss")

  (provide/contract
   [hashed-table% (implementation?/c table<%>)]
   [make-hashed-table
    (([hash hash-fn/c]
      [equ? equality/c]
      [keys (listof any/c)]
      [values (listof any/c)])
     . ->r . table/c)])

  (define hashed-table% table-from-set%)

  (define (make-hashed-table hash equ? keys values)
    (make-table-from-set
     (make-hashed-set (binding-lift hash)
                      (binding-lift equ?)
                      (map make-binding keys values))))

  )